#ifndef _common_function_h_
#define _common_function_h_

#include "type.h"

//====================================================宏定义函数区====================================================
//-------------------------------------------------------------------------------------------------------------------
// 函数简介     绝对值函数 数据范围是 [-32767,32767]
// 参数说明     dat             需要求绝对值的数
// 返回参数     int             返回绝对值
// 使用示例     dat = func_abs(dat);                            // 将dat变成正数
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
#define func_abs(x) ((x) >= 0 ? (x) : -(x))

//-------------------------------------------------------------------------------------------------------------------
// 函数简介     限幅 数据范围是 [-32768,32767]
// 参数说明     x               被限幅的数据
// 参数说明     y               限幅范围(数据会被限制在-y至+y之间)
// 返回参数     int             限幅之后的数据
// 使用示例     int dat = func_limit(500, 300);                 // 数据被限制在-300至+300之间  因此返回的结果是300
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
#define func_limit(x, y) ((x) > (y) ? (y) : ((x) < -(y) ? -(y) : (x)))

//-------------------------------------------------------------------------------------------------------------------
// 函数简介     偏置 数据范围是 [-32768,32767]
// 参数说明     x               原数据
// 参数说明     y               偏置(数据会被加上或减去y)
// 返回参数     int             偏置之后的数据
// 使用示例     int dat = func_outside(4, 10);                 // 数据被加上10的偏置  因此返回的结果是14
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
#define func_outside(x, y) ((x) < (0) ? (x - y) : (x + y))
#define func_outside_ab(x, a, b) ((x) < (0) ? (x + a) : (x + b))

//-------------------------------------------------------------------------------------------------------------------
// 函数简介     双边限幅 数据范围是 [-32768,32767]
// 参数说明     x               被限幅的数据
// 参数说明     a               限幅范围左边界
// 参数说明     b               限幅范围右边界
// 返回参数     int             限幅之后的数据
// 使用示例     int dat = func_limit_ab(500, -300, 400);        //数据被限制在-300至+400之间  因此返回的结果是400
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
#define func_limit_ab(x, a, b) ((x) < (a) ? (a) : ((x) > (b) ? (b) : (x)))

//====================================================宏定义函数区====================================================

//=====================================================常规函数区=====================================================

int16_t func_min(int16_t a, int16_t b);
static uint32_t func_e(uint8_t n);
int16_t func_str2int(uint8_t *str, uint8_t len);
uint8_t *func_int2str(uint8_t *str, int32_t num, uint8_t len);
uint8_t *func_uint2str(uint8_t *str, int32_t num, uint8_t len);
float func_Qrsqrt(int32_t number);

//=====================================================常规函数区=====================================================

#endif
